package com.yc.jpyy.base.util;

import java.util.List;

public class PageBean {

	public PageBean() {
		init();
	}

	private List list;// 要返回的某一页的记录列表

	private int allRow; // 总记录数

	private int totalPage;// 总页数

	private int currentPage;// 当前页

	private int pageSize = 10;// 每页记录数

	@SuppressWarnings("unused")
	private boolean isFirstPage;// 是否为第一页

	@SuppressWarnings("unused")
	private boolean isLastPage;// 是否为最后一页

	@SuppressWarnings("unused")
	private boolean hasPreviousPage;// 是否有前一页

	@SuppressWarnings("unused")
	private boolean hasNextPage;// 是否有下一页

	private int startPage;// 起始页

	private int endPage;// 结束页

	public int getEndPage() {
		return endPage;
	}

	public void setEndPage(int endPage) {
		this.endPage = endPage;
	}

	public int getStartPage() {
		return startPage;
	}

	public void setStartPage(int startPage) {
		this.startPage = startPage;
	}

	public List getList() {
		return list;
	}

	public void setList(List list) {
		this.list = list;
	}

	public int getAllRow() {
		return allRow;
	}

	public void setAllRow(int allRow) {
		this.allRow = allRow;
	}

	/**
	 * 分页机制。我贴出的代码是我仿百度的分页机制。页面显示10个页码，每页显示5条数据。至于这个机制，自己研究一下就很容易懂得。大体意思就是，当前页总位于中间位置，显示页数是10
	 * 分页方法 通过这个方法,得到两个数据——startPage和endPage 页面上的页码就是根据这两个数据处理后显示
	 * 
	 * @param nowPage当前页
	 * @param totalPage总页数
	 */
	public void paginationTool(int nowPage, int totalPage) {
		this.currentPage = nowPage;
		this.totalPage = totalPage;
		/**
		 * 计算startPage与endPage的值
		 * 
		 */
		if (this.totalPage < pageSize) {
			/** if中是总页数小于SHOWPAGES的情况 */
			this.startPage = 1;
			this.endPage = totalPage;
		} else {
			/** else中是总页数大于SHOWPAGES的情况 */
			if (this.currentPage <= pageSize / 2 + 1) {
				this.startPage = 1;
				this.endPage = pageSize;
			} else {
				this.startPage = this.currentPage - (pageSize / 2);
				//每页显示的数据为偶数
				if (pageSize % 2 == 0) {
					this.endPage = this.currentPage + (pageSize / 2 - 1);
				} else {
					this.endPage = this.currentPage + (pageSize / 2);
				}
				if (this.endPage >= this.totalPage) {
					this.endPage = this.totalPage;
					this.startPage = this.totalPage - pageSize + 1;
				}
			}
		}
	}

	// 得到一共多少页
	public int getTotalPage() {

		totalPage = this.countTotalPage(pageSize, allRow);
		return totalPage;
	}

	public void setTotalPage(int totalPage) {
		this.totalPage = totalPage;
	}

	public int getCurrentPage() {
		return currentPage;
	}

	public void setCurrentPage(int currentPage) {
		this.currentPage = currentPage;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	/**
	 * 初始化分页信息
	 */
	public void init() {
		this.isFirstPage = isFirstPage();
		this.isLastPage = isLastPage();
		this.hasPreviousPage = isHasPreviousPage();
		this.hasNextPage = isHasNextPage();
	}

	/**
	 * 以下判断页的信息,只需getter方法(is方法)即可
	 */

	public boolean isFirstPage() {
		return currentPage == 1;// 如是当前页是第1页
	}

	public boolean isLastPage() {
		return currentPage == totalPage;// 如果当前页是最后一页
	}

	public boolean isHasPreviousPage() {
		return currentPage != 1;// 只要当前页不是第1页
	}

	public boolean isHasNextPage() {
		return currentPage != totalPage;// 只要当前页不是最后1页
	}

	/** */
	/**
	 * 计算总页数,静态方法,供外部直接通过类名调用
	 * 
	 * @param pageSize
	 *            每页记录数
	 * @param allRow
	 *            总记录数
	 * @return 总页数
	 */
	public int countTotalPage(final int pageSize, final int allRow) {
		int totalPage = allRow % pageSize == 0 ? allRow / pageSize : allRow
				/ pageSize + 1;
		return totalPage;
	}

	/** */
	/**
	 * 计算当前页开始记录
	 * 
	 * @param pageSize
	 *            每页记录数
	 * @param currentPage
	 *            当前第几页
	 * @return 当前页开始记录号
	 */
	public static int countOffset(final int pageSize, final int currentPage) {
		final int offset = pageSize * (currentPage - 1);
		return offset;
	}

	/**
	 * 计算当前页,若为0或者请求的URL中没有"?page=",则用1代替
	 * 
	 * @param page
	 *            传入的参数(可能为空,即0,则返回1)
	 * @return 当前页
	 */
	public static int countCurrentPage(int page) {
		final int curPage = (page == 0 ? 1 : page);
		return curPage;
	}

	public static int countTotalGroup(int totalPage) {
		int totalGroup = totalPage % 5 == 0 ? totalPage / 5 : totalPage / 5 + 1;
		return totalGroup;
	}

	public void setHasNextPage(boolean hasNextPage) {
		this.hasNextPage = hasNextPage;
	}

	public void setHasPreviousPage(boolean hasPreviousPage) {
		this.hasPreviousPage = hasPreviousPage;
	}

	public void setFirstPage(boolean isFirstPage) {
		this.isFirstPage = isFirstPage;
	}

	public void setLastPage(boolean isLastPage) {
		this.isLastPage = isLastPage;
	}

	public static void main(String[] args) {
		PageBean p = new PageBean();
		p.paginationTool(7, 144);
		System.out.println(p.getStartPage());
		System.out.println(p.getEndPage());

	}

}
